<?php
	/**
	 * WebSecurity
	 * @package Core
	 * @author Otavio Theiss - iperfly@gmail.com
	 * @copyright 15/08/2010
	 */
	class CoreWebSecurity {
		
		/**
		 * Construtor
		 */
		public function __construct() {
			
		}
	
		/**
		 * Adiciona ou troca o valor de um parametro QueryString
		 *
		 * @param string $key
		 * @param string $value
		 * @return querystring
		 */
		public function setUrlParameter($key, $value) {
			$_GET[$key] = $value;
			$url = null;
			foreach ($_GET as $k => $v)
				$url .= $k."/".$v."/";
			//CoreDefault::doDebug($url);	
			return $url;
		}
		/**
		 * retorna string dos parametros $_GET
		 *
		 * @param string $key
		 * @param string $value
		 * @return querystring
		 */
		public function getUrlParameter() {
			$url = null;
			foreach ($_GET as $k => $v)
				$url .= $k."/".$v."/";
			//CoreDefault::doDebug($url);	
			return "/".$url;
		}
		
		/**
		 * Adiciona ou troca o valor de um parametro QueryString utilizando como parametro um array
		 *
		 * @param array $array
		 * @param string $url
		 * @param boolean $encript
		 * @return querystring
		 */
		public function setArrayUrlParameter($array, $url = '',$encript=true) {
			$zz = array();
			if($url == '')
				$url = $_SERVER['QUERY_STRING'];
			if($encript){
				$url = str_replace('_auth=','',$url);
				$url = self::mycrypt_decode($url);
			}
			$b = explode("&",$url);
			foreach ($b as $k => $v){
				$z = explode('=',$v);
				if(!empty($z[0]))
					$zz[$z[0]] = $z[1];
			}
			foreach ($array as $kk=>$vv)
				$zz[$kk] = $vv;
			
			return http_build_query($zz);
		}
		
		/**
		 * retira parametro da url
		 *
		 * @param string/array $unsetKey
		 * @param querystring $url
		 * @param boolean $encript | default false
		 * @return querystring
		 */
		public function unsetUrlParameter($unsetKey, $url='', $encript=false){
			
			if($url == '')
				$url = $_SERVER['QUERY_STRING'];
			if($encript){
				$url = str_replace('_auth=','',$url);
				$url = self::mycrypt_decode($url);
			}
			if(is_array($unsetKey))
				$unsetArray = $unsetKey;
			else
				$unsetArray = explode(",",$unsetKey);
			
			$b = self::querystring2array($url);
			if(is_array($unsetArray))
				foreach ($unsetArray as $key => $value)
					unset($b[$value]);
			
			return http_build_query($b);
		}
			
		/**
		 * Codifica uma url
		 *
		 * @param array $querystring
		 * @param string $param
		 * @return string
		 */
		public function urlIn($querystring = null, $param = "_auth") {
			if (!$querystring)
				$querystring = $_SERVER['QUERY_STRING'];
				return $param."=".self::mycrypt_encode($querystring);
		}
		
		
		/**
		 * Decodifica uma url
		 *
		 * @param array $querystring
		 * @param string $param
		 * @return array
		 */
		public function urlOut($querystring = null, $param = "_auth=") {
			if (!$querystring){
				$querystring = $_SERVER['QUERY_STRING'];
				$querystring = str_replace($param,'',$querystring);	
			}
			return self::querystring2array(self::mycrypt_decode($querystring));
		}
		
		
		
		/**
		 * Transforma uma querystring em array
		 *
		 * @param string $querystring
		 * @return array
		 */
		public function querystring2array($querystring = null) {
			if (!$querystring)
				$querystring = $_SERVER['QUERY_STRING'];
			$array = array();
			$v1 = split("&", $querystring);
			foreach($v1 as $value) {
				$v2 = split("=", $value);
				$array[$v2[0]] = urldecode(@$v2[1]);
			}
			return $array;
		}
		
	
		/**
		 * Transforma um array numa querystring
		 *
		 * @param array $array
		 * @return string
		 */
		public function array2querystring($array = null) {
			if (!$array)
				$array = $_GET;
			$querystring = "";
			foreach($array as $key => $value) {
				if ($querystring)
					$querystring .= "&";
				$querystring .= $key."=".urlencode($value);
			}
			return $querystring;
		}
		
		
		
		
		/**
		 * Criptografa o parametro
		 * 
		 * @return mixed
		 */
		public function doMd5($s) {
			$s = md5($s);
			return $s;
		}
	
		/**
		 * Codifica um texto
		 *
		 * @param string $text
		 * @return string
		 */
		public function getIn($text) {
			//return base64_encode($text);
			return self::mycrypt_encode($text);
		}
		
		/**
		 * Decodifica um texto
		 *
		 * @param string $text
		 * @return string
		 */
		public function getOut($text) {
			//return base64_decode($text);
			return self::mycrypt_decode($text);
		}		
	
		///////////////////////////////////
		//			ADICIONAIS
		/////////////////////////////////////

		/**
		 * Descriptografada com Base64 3 vezes
		 *
		 * @param string $str
		 * @return string
		 */
		private function mycrypt_encode($str) {	
			for($i=0; $i<1;$i++)  {
				$str=strrev(base64_encode($str));
			}
			return $str;
		}

		/**
		 * Descriptografada com mycrypt_encode
		 *
		 * @param string $str
		 * @return string
		 */
		private function mycrypt_decode($str) {	
			for($i=0; $i<1;$i++){
				$str=base64_decode(strrev($str));
			}
			return $str;
		}
		
		/**
		 * retorna o valor de um $_POST
		 *
		 * @param string $var
		 * @return string
		 */
		public function post($var){
			$s	=	@$_POST[$var];
			//$s = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop|alter table|show tables|#|\*|--|\\\\)/"),"",$s);
			$s = trim($s);
			$s = addslashes($s);
		
			if(empty($s))
				$s	=	NULL;
				
			return $s;
		}

		/**
		 * retorna o valor de um $_GET
		 *
		 * @param string $var
		 * @return string
		 */
		public function get($var){
			$s	=	@$_GET[$var];
			//$s = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop|alter table|show tables|#|\*|--|\\\\)/"),"",$s);
			$s = trim($s);
			$s = addslashes($s);
		
			if(empty($s))
				$s	=	NULL;
				
			return $s;
		}

		/**
		 * retorna o valor de um $_REQUEST
		 *
		 * @param string $var
		 * @return string
		 */
		public function request($var){
			$s	=	@$_REQUEST[$var];
			//$s = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop|alter table|show tables|#|\*|--|\\\\)/"),"",$s);
			$s = trim($s);
			$s = addslashes($s);
		
			if(empty($s))
				$s	=	NULL;
				
			return $s;
		}

		/**
		 * retorna o valor de um $_REQUEST tratando valor para inteiro
		 *
		 * @param string $var
		 * @return int
		 */
		public function requestInt($var){
			 return (int) self::request($var); 
		}
		
		/**
		 * retorna o valor de um $_POST tratando valor para inteiro
		 *
		 * @param string $var
		 * @return int
		 */
		public function postInt($var){ 
			return (int) self::post($var); 
		}
		
		/**
		 * retorna o valor de um $_GET tratando valor para inteiro
		 *
		 * @param string $var
		 * @return int
		 */
		public function getInt($var){ 
			return (int) self::get($var); 
		}
		
			
	}
?>